01
指针就是地址
理解内存地址、指针变量的本质、取地址符&与解引用符*、指针的声明与初始化。
基础核心
02
指针与变量
指针指向普通变量、通过指针修改变量值、指针的指针(二级指针)、void* 泛型指针。
变量二级指针
03
指针与一维数组
数组名就是首地址、指针遍历数组、指针运算(++、--、+、-)、数组下标与指针的关系。
数组遍历
04
指针与多维数组
二维数组的内存布局、行指针与列指针、指针数组与数组指针的区别、用指针操作二维数组。
二维布局
05
指针与字符串
字符串常量与字符数组、字符指针与字符串、字符串处理函数(strcpy、strlen等)的指针实现、const char* 与 char* const。
字符串const
06
指针与函数
函数指针的声明与使用、回调函数机制、函数指针数组(转移表)、返回指针的函数。
回调转移表
07
动态内存管理
malloc/calloc/realloc/free、堆区与栈区的区别、内存泄漏的检测与预防、野指针的成因与避免。
堆区泄漏
08
指针的高级话题
复杂指针声明解析(右左法则)、const与指针的复杂组合、指针与结构体、指针与链表。
右左法则结构体
09
指针的常见陷阱
悬空指针、缓冲区溢出、指针类型不匹配、数组越界访问。
陷阱安全
10
实战项目:指针应用
用指针实现一个简易内存池、用函数指针实现一个计算器、用指针优化字符串处理函数。
项目内存池
11
数组的存储与访问
数组在内存中的连续存储、数组元素的随机访问原理、数组的边界与越界。
存储边界
12
数组作为函数参数
数组退化为指针、传递数组长度的必要性、二维数组作为参数、变长数组(VLA)。
退化VLA
13
字符数组与字符串
字符数组的初始化、字符串的存储方式、字符串输入输出的陷阱、字符串安全函数(strncpy等)。
字符安全
14
数组与指针的等价性
下标运算的本质、指针与数组的互换使用、多维数组的指针等价形式。
等价下标
15
指针数组与数组指针
指针数组(存储指针的数组)、数组指针(指向数组的指针)、二者的应用场景。
指针数组数组指针
16
函数指针数组
转移表的实现、状态机的指针实现、命令模式与函数指针。
状态机命令模式
17
回调函数与qsort
qsort函数的使用、自定义比较函数、回调函数的实际应用。
qsort比较器
18
动态数组的实现
用malloc实现动态数组、动态数组的扩容策略、动态二维数组。
动态扩容
19
字符串数组
命令行参数argv的实现、字符串排序、字符串查找与匹配。
argv排序
20
数组与指针的常见错误
数组名不能自增、指针越界、野指针、内存重复释放。
错误调试
21
const与指针
const int*、int* const、const int* const的区别、const在函数参数中的应用。
const只读
22
volatile与指针
volatile的作用、硬件寄存器操作、多线程共享变量。
volatile硬件
23
指针与位操作
用指针操作二进制位、位域与指针、内存对齐与指针。
位域对齐
24
指针与文件操作
FILE*指针、文件读写指针、文件缓冲区与指针。
文件FILE
25
指针与数据结构
链表、栈、队列的指针实现、二叉树与指针。
链表二叉树
26
指针与多线程
线程安全与指针、原子操作与指针、线程间共享数据的指针管理。
线程原子
27
指针与嵌入式系统
寄存器地址映射、绝对地址访问、内存映射I/O。
嵌入式寄存器
28
指针与性能优化
缓存友好访问、指针别名与restrict、循环展开与指针。
优化restrict
29
指针与C标准库
string.h中的指针操作、stdlib.h中的指针操作、stdio.h中的指针操作。
标准库API
30
综合实战:指针深度应用
用指针实现一个简易的JSON解析器、用函数指针实现一个插件系统、用指针优化图像处理算法。
JSON插件图像